package com.ma.a13;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @ClassName A14
 * @Author: mayongqiang
 * @DATE 2022/4/10 21:02
 * @Description: 测试
 */

public class A13 {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        Target target = new Target();
        proxy.setMethodInterceptor(new MethodInterceptor() {
            @Override
            public Object intercept(Object p, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                System.out.println("before...");

                /* 三种方式  spring用的第二种 */
                // 1、反射调用 ，传入目标
                //return method.invoke(target, args);

                // 2、内部无反射  结合目标用
                //return methodProxy.invoke(target, args);

                // 3、内部无反射，结合代理用
                return methodProxy.invokeSuper(p, args);
            }
        });
        proxy.save();
        proxy.save(1);
        proxy.save(2L);
    }
}
